﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WeChatBotSDK.JsonEx;

namespace WeChatBotSDK.Models.EventCallback
{
    /// <summary>
    /// 微信消息事件数据类
    /// </summary>
    public class WeChatMessageData:IWeChatEventData
    {
        /// <summary>
        /// 收到这条消息的 13 位时间戳
        /// </summary>
        [JsonPropertyName("timeStamp")]
        public string TimeStamp { get; set; }

        /// <summary>
        /// 消息来源类型
        /// </summary>
        [JsonConverter(typeof(StringToEnumConverter<FromType>))]
        [JsonPropertyName("fromType")]
        public FromType FromType { get; set; }

        /// <summary>
        /// 消息类型
        /// </summary>
        [JsonConverter(typeof(StringToEnumConverter<MsgType>))]
        [JsonPropertyName("msgType")]
        public MsgType MsgType { get; set; }

        /// <summary>
        /// 消息来源
        /// </summary>
        [JsonConverter(typeof(StringToEnumConverter<MsgSource>))]
        [JsonPropertyName("msgSource")]
        public MsgSource MsgSource { get; set; }

        /// <summary>
        /// 来源的微信 ID
        /// </summary>
        [JsonPropertyName("fromWxid")]
        public string FromWxid { get; set; }

        /// <summary>
        /// 群内发言人的 wxid，仅在 fromType=2（群聊）时有效
        /// </summary>
        [JsonPropertyName("finalFromWxid")]
        public string FinalFromWxid { get; set; }

        /// <summary>
        /// 艾特的微信 ID 列表，仅在 fromType=2（群聊）时有效
        /// </summary>
        [JsonPropertyName("atWxidList")]
        public List<string> AtWxidList { get; set; }

        /// <summary>
        /// 是否静默消息，仅在 fromType=2（群聊）时有效。
        /// 0 表示非静默。
        /// </summary>
        //[JsonConverter(typeof(IntConverter))]
        [JsonPropertyName("silence")]
        public int Silence { get; set; }

        /// <summary>
        /// 群成员数量，仅在 fromType=2（群聊）时有效
        /// </summary>
        //[JsonConverter(typeof(IntConverter))]
        [JsonPropertyName("membercount")]
        public int MemberCount { get; set; }

        /// <summary>
        /// 消息签名
        /// </summary>
        [JsonPropertyName("signature")]
        public string Signature { get; set; }

        /// <summary>
        /// 消息内容
        /// </summary>
        [JsonPropertyName("msg")]
        public string Msg { get; set; }

        /// <summary>
        /// 消息 ID
        /// </summary>
        [JsonPropertyName("msgId")]
        public string MsgId { get; set; }

        /// <summary>
        /// 消息内容的 Base64 编码
        /// </summary>
        [JsonPropertyName("msgBase64")]
        public string MsgBase64 { get; set; }
    }
}
